module OMBUFX1 (Z, A);
   output Z;
   input  A;
endmodule

module OMINVX1 (Z, A);
   output Z;
   input  A;
endmodule

module OMOR3X1 (Z, A, B, C);
   output Z;
   input  A;
   input  B;
   input  C;
endmodule

module OMDFFX1 (D, CLK, Q, QB);

input D, CLK;
output Q, QB;
reg Q, QB;

endmodule /* OMDFF */

module xtalk_2ff (i1, o1, clk);
  input i1, clk;
  output o1;
  
  /* Clock tree */
  OMBUFX1  u1 ( .A(clk), .Z(n1) );
  OMBUFX1  u2 ( .A(n1), .Z(n2) );
  OMINVX1  u3 ( .A(n1), .Z(n3) );
  
  /* Sequential */
  OMDFFX1   ff1 ( .CP(n2), .D(n5), .Q(n6) );
  OMDFFX1   ff2 ( .CP(n3), .D(n7), .Q(o1) );
  
  /* Data path */
  OMBUFX1  u4 ( .A(i1), .Z(n4) );
  OMOR3X1    u5 ( .C(n4), .Z(n5) );
  OMBUFX1  u6 ( .A(n6), .Z(n10) );
  OMBUFX1  u7 ( .A(n10), .Z(n11) );
  OMBUFX1  u8 ( .A(n11), .Z(n12) );
  OMBUFX1  u9 ( .A(n12), .Z(n7) );

endmodule

module top(i1, i2, o1, o2, clk);
  input i1, i2, clk;
  output o1, o2;

  OMINVX1  u1 ( .Z(n3) );
  OMINVX1  u2 ( .A(n3) );
  xtalk_2ff blockA(i1, o1, clk);
  xtalk_2ff blockB(i2, o2, clk);
  
endmodule

module s173112(i1, o1, clk);
  input i1, clk;
  output o1;

  OMINVX1  u1 ( .Z(n3) );
  OMINVX1  u2 ( .A(n3) );
  xtalk_2ff blockA(i1, o1, clk);
endmodule
